package com.sakura.hk.word.Handle;

import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;
import lombok.Getter;

/**
 * word手柄,用来操作word
 *
 * @Author: 贺坤
 * @Date: 2021/10/14 10:48
 */
public class WordHandle {
    /**
     * word文档
     */
    @Getter
    private Dispatch doc;
    /**
     * 选定的范围或插入点
     */
    @Getter
    private Dispatch selection;

    /**
     * 构造word 操作对象
     *
     * @param word      word 程序对象本身
     * @param documents 文档集合
     */
    public WordHandle(ActiveXComponent word, Dispatch documents) {
        this.doc = Dispatch.call(documents, "Add").toDispatch();
        this.selection = Dispatch.get(word, "Selection").toDispatch();
    }

    /**
     * 在当前插入点插入字符串
     *
     * @param newText 要插入的新字符串
     */
    public void insertText(String newText) {
        Dispatch.put(selection, "Text", newText);
        moveEnd();
    }

    /**
     * 插入段落,插入后自动换行到下一段
     *
     * @param newText
     */
    public void insertParagraph(String newText) {
        insertText(newText);
        lineFeed();
    }

    /**
     * 在当前插入点插入图片
     *
     * @param imagePath 图片路径
     */
    public void insertImage(String imagePath) {
        Dispatch.call(Dispatch.get(selection, "InLineShapes").toDispatch(), "AddPicture", imagePath);
        lineFeed();
    }

    /**
     * 在当前插入点连续插入图片
     * (传入图片后,不换行)
     *
     * @param imagePath 图片路径
     */
    public void insertImageSeries(String imagePath) {
        insertImage(imagePath);
    }

    /**
     * 关闭当前word文档
     * 默认保存
     *
     * @param savePath 另存路径
     */
    public void closeDocument(String savePath) {
        // 另存为
        save(savePath);
        // 保存
        Dispatch.call(doc, "Save");
        // 关闭 true为保存当前文档
        Dispatch.call(doc, "Close", new Variant(true));


    }
///////////////////////////////////////////////////////////////////////////////////////////////////////////
/////一下为私有方法///////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////

    /**
     * 换行
     */
    private void lineFeed() {
        insertText("\r\n");
    }

    /**
     * 把插入点移动到文件末尾
     */
    private void moveEnd() {
        Dispatch.call(selection, "EndKey", new Variant(6));

    }

    /**
     * 把插入点移动到文件首位置
     */
    private void moveStart() {
        Dispatch.call(selection, "HomeKey", new Variant(6));
    }

    /**
     * 文件另存为
     *
     * @param savePath 另存为路径
     */
    private void save(String savePath) {
        Dispatch.call(doc, "SaveAs", new Variant(savePath));
    }
}
